//
//  BaseListViewController.m
//  PandaTakeaway
//
//  Created by smufs on 2017/5/17.
//  Copyright © 2017年 李冰. All rights reserved.
//

#import "BaseListViewController.h"

@interface BaseListViewController ()

@end

@implementation BaseListViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    _pageIndex = 1;
    _pageSize = 20;
    self.view.backgroundColor = kLightGrayColor;
    
}

- (void)setupTableView:(CGRect)frame style:(UITableViewStyle)style {
    
    _tableView = _tableView = [[UITableView alloc] initWithFrame:frame style:style];
    _tableView.delegate = self;
    _tableView.dataSource = self;
//    _tableView.estimatedRowHeight = CGFLOAT_MIN;
//    _tableView.estimatedSectionFooterHeight = CGFLOAT_MIN;
//    _tableView.estimatedSectionHeaderHeight = CGFLOAT_MIN;
}

- (UITableView *)tableView {
    
    if (_tableView) return _tableView;
    
    _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.lb_width, lbScreenHeight - 64) style:UITableViewStyleGrouped];
    _tableView.backgroundColor = kBgColor;
    _tableView.delegate = self;
    _tableView.dataSource = self;
    _tableView.estimatedRowHeight = 0;
    _tableView.estimatedSectionFooterHeight = 0;
    _tableView.estimatedSectionHeaderHeight = 0;
    return _tableView;
}

- (NSMutableArray *)dataSource {
    
    if (_dataSource) return _dataSource;
    
    _dataSource = [NSMutableArray new];
    return _dataSource;
}

#pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    return self.dataSource.count;
}

#pragma mark - UITableViewDelegate
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"baseIdentifier"];
    
    if (!cell) {
        
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"baseIdentifier"];
    }
    
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {

    return CGFLOAT_MIN;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {

    return CGFLOAT_MIN;
}

// refresh available with page
- (void)setupPageHeader:(BOOL)header footer:(BOOL)footer {
    
    if (header)
    {
        WEAKSELF;
        self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
            weakSelf.pageIndex = 1;
            weakSelf.tableView.mj_footer.hidden = YES;
            
            [weakSelf requestPageData:^(YCNetworkingStatusCode code, NSArray *dataArray) {
                [weakSelf.tableView.mj_header endRefreshing];
                [weakSelf opaqueHeaderAndFooter];
                if (code == YCNetworkingStatusCodeSuccess) [weakSelf addDataFromArray:dataArray];
            }];
        }];
    }
    
    if (footer)
    {
        WEAKSELF;
        self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
            weakSelf.tableView.mj_header.hidden = YES;
            [weakSelf requestPageData:^(YCNetworkingStatusCode code, NSArray *dataArray) {
                [weakSelf.tableView.mj_footer endRefreshing];
                [weakSelf opaqueHeaderAndFooter];
                if (code == YCNetworkingStatusCodeSuccess) [weakSelf addDataFromArray:dataArray];
            }];
        }];
    }
}

- (void) headerRefresh {
    
    if (self.tableView.mj_header) {
        [self.tableView.mj_header beginRefreshing];
    }
    else
    {
        WEAKSELF;
        weakSelf.pageIndex = 1;
        weakSelf.tableView.mj_footer.hidden = YES;
        [self requestPageData:^(YCNetworkingStatusCode code, NSArray *dataArray) {
            [weakSelf.tableView.mj_footer endRefreshing];
            [weakSelf opaqueHeaderAndFooter];
            if (code == YCNetworkingStatusCodeSuccess) [weakSelf addDataFromArray:dataArray];
        }];
    };
    
}
- (void) footerRefresh {
    
    if (self.tableView.mj_footer) {
        [self.tableView.mj_footer beginRefreshing];
    }
    else
    {
        WEAKSELF;
        [self requestPageData:^(YCNetworkingStatusCode code, NSArray *dataArray) {
            [weakSelf.tableView.mj_footer endRefreshing];
            [weakSelf opaqueHeaderAndFooter];
            if (code == YCNetworkingStatusCodeSuccess) [weakSelf addDataFromArray:dataArray];
        }];
    };
    
}
- (void) opaqueHeaderAndFooter {
    
    self.tableView.mj_footer.hidden = NO;
    self.tableView.mj_header.hidden = NO;
}

- (void)addDataFromArray:(NSArray *)dataArray {
    
    if (1 == self.pageIndex)
    {
        [self.dataSource removeAllObjects];
    }
    
    [self.dataSource addObjectsFromArray:dataArray];
    
    if (dataArray.count < self.pageSize)
    {
        [self.tableView.mj_footer endRefreshingWithNoMoreData];
    }
    else
    {
        self.pageIndex++;
    }
}

@end
